import axios,{ AxiosHeaders } from 'axios'
import type { AxiosRequestConfig } from 'axios'
// 把 vant 的 Dialog 组件拿过来
import { Dialog } from 'vant'
// 请求失败做的事
// import { Dialog } from 'vant'

// 创建 axios 实例
const instance = axios.create({
  // 请求地址
  baseURL: 'http://121.89.205.189:3000/api',
  // 超过延时做的事
  timeout: 10000
})

// 配置请求拦截器
instance.interceptors.request.use(config => {
  // console.log(config)
// 判断是 获取用户信息
// 比如进入页面就是首页 我们需要发个请求来判断一下 这个手机号登陆过没有
// 判断的方式为是否在login页面登陆过并保存了一个token 和 user_id
// 因为用/user/info可以请求到token 和 user_id user_id在login验证过

// console.log(config)

// 注：以/user/info路径发请求时直接去获取该路径的token 有就放行 没有就拦截
if (config.url === '/user/info') {
  // 验证token如果有 那么token 和 user_id都存在 可以登录
  // 直接给到/user/info里面
  (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')

}  

// 判断是 购物车相关
  // 所有的购物车相关接口都是 /cart/xxxx
  // 只要判断是以 /cart 开头的, 就可以
  // 每一个购物车相关的接口都要判断 token 是否真实有效
  // 可以在响应拦截器内做判断
  if (/^\/cart/.test(config.url)) {
    // 拿到 token 进行添加
    (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
  }

  // 判断是 订单相关

  return config
  
})

// 配置响应拦截器
instance.interceptors.response.use(
  response => {

     // 判断如果返回的内容的 code 为 '10119'
    // 那么就表示无效 token
    // 做出提示
    if (response.data.code === '10119') {
      Dialog({
        title: '提示',
        message: '您登录状态有问题, 请重新登录'
      })

      return { code: 0 }
    }


    // response 就是请求回来的内容  直接返回
    return response.data
  },
  // 请求失败做的事
  // err => {
  //   // Dialog.alert({ title: '网络错误', message: '网络不给力, 稍后再来' })
  // }
)

// 导出实例
export default instance


// 创建实例(请求地址 延时)=>设置请求拦截器 (参数config 返回值config)=>
// 设置响应拦截器(参数response 返回值response.data)
// =>导出实例